﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct stu1
{
	//1.成员变量；
	char name[21];
	float scores[3];
};

//main121：案例：结构体实现学生按总分升序排名
int main121()
{
	struct stu1 s[3];
	for (int i = 0; i < 3; i++)
	{
		printf("2.请您输入，学生姓名，成绩：\n");
		scanf("%s%f%f%f", s[i].name, &s[i].scores[0], &s[i].scores[1], &s[i].scores[2]);
		//张三 98 89 90			李四 67 78 87			王五 88 89 78
	}
	//4.冒泡排序；根据学生成绩总分，从小到大排列学生信息；
	for (int i = 0; i < 3 - 1; i++)
	{
		for (int j = 0; j < 3 - i - 1; j++)
		{
			int sum1 = s[j].scores[0] + s[j].scores[1] + s[j].scores[2];
			int sum2 = s[j + 1].scores[0] + s[j + 1].scores[1] + s[j + 1].scores[2];
			if (sum1 > sum2)
			{
				//5.结构体交换，交换所有成员列表中的数据；
				/*//6.交换姓名；
				char temp[21] = { 0 };
				strcpy(temp, s[j].name);
				strcpy(s[j].name, s[j + 1].name);
				strcpy(s[j + 1].name, temp);

				//7.交换成绩；
				for (int k = 0; k < 3; k++)
				{
					float temp = s[j].scores[k];
					s[j].scores[k] = s[j + 1].scores[k];
					s[j + 1].scores[k] = temp;
				}*/

				//8.优化上面的结构体交换，使用结构体变量交换；
				struct stu1 temp = s[j];
				s[j] = s[j + 1];
				s[j + 1] = temp;
			}
		}
	}


	for (int i = 0; i < 3; i++)
	{
		printf("姓名：%s\n", s[i].name);//姓名：尼古拉斯

		//3.%.1f是保留一位小数输出的意思；
		printf("成绩：%.1f	%.1f	%.1f\n", s[i].scores[0], s[i].scores[1], s[i].scores[2]);//成绩：100.0     200.0   300.0
	}

	/*姓名：李四
	成绩：67.0      78.0    87.0
	姓名：王五
	成绩：88.0      89.0    78.0
	姓名：张三
	成绩：98.0      89.0    90.0*/

	system("pause");
	return EXIT_SUCCESS;
}